import os
import chardet
import pandas as pd


# 在固定的路径下遍历文件夹，获取CSV文件名列表
def _get_file_list(path,type):
    file_list = []
    for root, dirs, files in os.walk(path):
        for file in files:
            # 默认情况下，只读取路径下的 type 类型的文件
            if os.path.splitext(file)[1].lower() == '.' + type:
                file_list.append(file)
    return file_list

# 通过地址+文件名列表，使用pandas库分别读取CSV文件内容，生成并返回一个DateFrame对象
def _get_file_content(path,file_list,file_encoding,type):
    # 定义一个DateFrame类型的对象file_content
    file_content = pd.DataFrame()
    for file in file_list:
        # 将查询的结果合并成一个DateFrame类型的对象file_content
        if type == 'xlsx':
            file_content = pd.concat([file_content, pd.read_excel(path + file)], axis=0)
        else:
            file_content = pd.concat([file_content, pd.read_csv(path + file, encoding=file_encoding)], axis=0)

    return file_content

# 检测CSV文件的编码类型并返回编码类型
def _check_file_encoding(file_path):
    with open(file_path, 'rb') as f:
        # 读取文件的前1024个字节作为样本进行检测
        sample = f.read(1024)
        # 使用chardet.detect方法检测文件的编码类型
        encoding_info = chardet.detect(sample)
        encoding = encoding_info.get('encoding')
        # 如果没有读取到编码类型，则返回utf-8
        return encoding if encoding is not None else "utf-8"

def get_file_content_byPath(path,type):
    # 调用get_file_list()方法获取文件名列表
    file_list = _get_file_list(path,type)
    # 读取第一个文件的编码类型
    file_encoding = _check_file_encoding(path + file_list[0])
    # 调用get_file_content()方法获取文件内容，返回DataFrame对象file_content
    file_content = _get_file_content(path,file_list,file_encoding,type)

    return file_content

